/* This is a generated file. Don't edit. Edit the source instead.
 */

#ifndef _notifications_h_
#define _notifications_h_

#include <stdbool.h>

#include <stdint.h>
#include "notification_center.h"


/*
 * Notification type search_response
 */

typedef struct nc_search_response nc_search_response_t;
struct nc_search_response
{
    void *response;
};

void nc_send_search_response_notification(nc_t *nc, void *response);

typedef void (*nc_search_response_callback_t)(nc_t *nc, const char *channel,
    nc_search_response_t *search_response_data, void *user_data);
void nc_add_search_response_observer(nc_t *nc,
    nc_search_response_callback_t callback, void *user_data);


/*
 * Notification type filelist_finished
 */

typedef struct nc_filelist_finished nc_filelist_finished_t;
struct nc_filelist_finished
{
    const char *hub_address;
    const char *nick;
    const char *filename;
    bool auto_matched;
};

void nc_send_filelist_finished_notification(nc_t *nc, const char *hub_address, const char *nick, const char *filename, bool auto_matched);

typedef void (*nc_filelist_finished_callback_t)(nc_t *nc, const char *channel,
    nc_filelist_finished_t *filelist_finished_data, void *user_data);
void nc_add_filelist_finished_observer(nc_t *nc,
    nc_filelist_finished_callback_t callback, void *user_data);


/*
 * Notification type download_finished
 */

typedef struct nc_download_finished nc_download_finished_t;
struct nc_download_finished
{
    const char *filename;
};

void nc_send_download_finished_notification(nc_t *nc, const char *filename);

typedef void (*nc_download_finished_callback_t)(nc_t *nc, const char *channel,
    nc_download_finished_t *download_finished_data, void *user_data);
void nc_add_download_finished_observer(nc_t *nc,
    nc_download_finished_callback_t callback, void *user_data);


/*
 * Notification type extra_slot_granted
 */

typedef struct nc_extra_slot_granted nc_extra_slot_granted_t;
struct nc_extra_slot_granted
{
    const char *nick;
    int extra_slots;
};

void nc_send_extra_slot_granted_notification(nc_t *nc, const char *nick, int extra_slots);

typedef void (*nc_extra_slot_granted_callback_t)(nc_t *nc, const char *channel,
    nc_extra_slot_granted_t *extra_slot_granted_data, void *user_data);
void nc_add_extra_slot_granted_observer(nc_t *nc,
    nc_extra_slot_granted_callback_t callback, void *user_data);


/*
 * Notification type external_ip_detected
 */

typedef struct nc_external_ip_detected nc_external_ip_detected_t;
struct nc_external_ip_detected
{
    const char *external_ip;
};

void nc_send_external_ip_detected_notification(nc_t *nc, const char *external_ip);

typedef void (*nc_external_ip_detected_callback_t)(nc_t *nc, const char *channel,
    nc_external_ip_detected_t *external_ip_detected_data, void *user_data);
void nc_add_external_ip_detected_observer(nc_t *nc,
    nc_external_ip_detected_callback_t callback, void *user_data);


/*
 * Notification type share_file_added
 */

typedef struct nc_share_file_added nc_share_file_added_t;
struct nc_share_file_added
{
};

void nc_send_share_file_added_notification(nc_t *nc);

typedef void (*nc_share_file_added_callback_t)(nc_t *nc, const char *channel,
    nc_share_file_added_t *share_file_added_data, void *user_data);
void nc_add_share_file_added_observer(nc_t *nc,
    nc_share_file_added_callback_t callback, void *user_data);


/*
 * Notification type share_scan_finished
 */

typedef struct nc_share_scan_finished nc_share_scan_finished_t;
struct nc_share_scan_finished
{
    const char *path;
};

void nc_send_share_scan_finished_notification(nc_t *nc, const char *path);

typedef void (*nc_share_scan_finished_callback_t)(nc_t *nc, const char *channel,
    nc_share_scan_finished_t *share_scan_finished_data, void *user_data);
void nc_add_share_scan_finished_observer(nc_t *nc,
    nc_share_scan_finished_callback_t callback, void *user_data);


/*
 * Notification type tth_available
 */

typedef struct nc_tth_available nc_tth_available_t;
struct nc_tth_available
{
    void *file;
    const char *tth;
    const char *leafdata_base64;
    double mibs_per_sec;
};

void nc_send_tth_available_notification(nc_t *nc, void *file, const char *tth, const char *leafdata_base64, double mibs_per_sec);

typedef void (*nc_tth_available_callback_t)(nc_t *nc, const char *channel,
    nc_tth_available_t *tth_available_data, void *user_data);
void nc_add_tth_available_observer(nc_t *nc,
    nc_tth_available_callback_t callback, void *user_data);


/*
 * Notification type hashing_complete
 */

typedef struct nc_hashing_complete nc_hashing_complete_t;
struct nc_hashing_complete
{
};

void nc_send_hashing_complete_notification(nc_t *nc);

typedef void (*nc_hashing_complete_callback_t)(nc_t *nc, const char *channel,
    nc_hashing_complete_t *hashing_complete_data, void *user_data);
void nc_add_hashing_complete_observer(nc_t *nc,
    nc_hashing_complete_callback_t callback, void *user_data);


/*
 * Notification type will_remove_share
 */

typedef struct nc_will_remove_share nc_will_remove_share_t;
struct nc_will_remove_share
{
    const char *local_root;
};

void nc_send_will_remove_share_notification(nc_t *nc, const char *local_root);

typedef void (*nc_will_remove_share_callback_t)(nc_t *nc, const char *channel,
    nc_will_remove_share_t *will_remove_share_data, void *user_data);
void nc_add_will_remove_share_observer(nc_t *nc,
    nc_will_remove_share_callback_t callback, void *user_data);


/*
 * Notification type did_remove_share
 */

typedef struct nc_did_remove_share nc_did_remove_share_t;
struct nc_did_remove_share
{
    const char *local_root;
    bool is_rescan;
};

void nc_send_did_remove_share_notification(nc_t *nc, const char *local_root, bool is_rescan);

typedef void (*nc_did_remove_share_callback_t)(nc_t *nc, const char *channel,
    nc_did_remove_share_t *did_remove_share_data, void *user_data);
void nc_add_did_remove_share_observer(nc_t *nc,
    nc_did_remove_share_callback_t callback, void *user_data);


/*
 * Notification type filelist_added
 */

typedef struct nc_filelist_added nc_filelist_added_t;
struct nc_filelist_added
{
    const char *nick;
    int priority;
};

void nc_send_filelist_added_notification(nc_t *nc, const char *nick, int priority);

typedef void (*nc_filelist_added_callback_t)(nc_t *nc, const char *channel,
    nc_filelist_added_t *filelist_added_data, void *user_data);
void nc_add_filelist_added_observer(nc_t *nc,
    nc_filelist_added_callback_t callback, void *user_data);


/*
 * Notification type filelist_removed
 */

typedef struct nc_filelist_removed nc_filelist_removed_t;
struct nc_filelist_removed
{
    const char *nick;
};

void nc_send_filelist_removed_notification(nc_t *nc, const char *nick);

typedef void (*nc_filelist_removed_callback_t)(nc_t *nc, const char *channel,
    nc_filelist_removed_t *filelist_removed_data, void *user_data);
void nc_add_filelist_removed_observer(nc_t *nc,
    nc_filelist_removed_callback_t callback, void *user_data);


/*
 * Notification type queue_source_removed
 */

typedef struct nc_queue_source_removed nc_queue_source_removed_t;
struct nc_queue_source_removed
{
    const char *target_filename;
    const char *nick;
};

void nc_send_queue_source_removed_notification(nc_t *nc, const char *target_filename, const char *nick);

typedef void (*nc_queue_source_removed_callback_t)(nc_t *nc, const char *channel,
    nc_queue_source_removed_t *queue_source_removed_data, void *user_data);
void nc_add_queue_source_removed_observer(nc_t *nc,
    nc_queue_source_removed_callback_t callback, void *user_data);


/*
 * Notification type queue_target_removed
 */

typedef struct nc_queue_target_removed nc_queue_target_removed_t;
struct nc_queue_target_removed
{
    const char *target_filename;
};

void nc_send_queue_target_removed_notification(nc_t *nc, const char *target_filename);

typedef void (*nc_queue_target_removed_callback_t)(nc_t *nc, const char *channel,
    nc_queue_target_removed_t *queue_target_removed_data, void *user_data);
void nc_add_queue_target_removed_observer(nc_t *nc,
    nc_queue_target_removed_callback_t callback, void *user_data);


/*
 * Notification type queue_source_added
 */

typedef struct nc_queue_source_added nc_queue_source_added_t;
struct nc_queue_source_added
{
    const char *target_filename;
    const char *nick;
    const char *source_filename;
};

void nc_send_queue_source_added_notification(nc_t *nc, const char *target_filename, const char *nick, const char *source_filename);

typedef void (*nc_queue_source_added_callback_t)(nc_t *nc, const char *channel,
    nc_queue_source_added_t *queue_source_added_data, void *user_data);
void nc_add_queue_source_added_observer(nc_t *nc,
    nc_queue_source_added_callback_t callback, void *user_data);


/*
 * Notification type queue_target_added
 */

typedef struct nc_queue_target_added nc_queue_target_added_t;
struct nc_queue_target_added
{
    const char *target_filename;
    uint64_t size;
    const char *tth;
    int priority;
};

void nc_send_queue_target_added_notification(nc_t *nc, const char *target_filename, uint64_t size, const char *tth, int priority);

typedef void (*nc_queue_target_added_callback_t)(nc_t *nc, const char *channel,
    nc_queue_target_added_t *queue_target_added_data, void *user_data);
void nc_add_queue_target_added_observer(nc_t *nc,
    nc_queue_target_added_callback_t callback, void *user_data);


/*
 * Notification type queue_directory_removed
 */

typedef struct nc_queue_directory_removed nc_queue_directory_removed_t;
struct nc_queue_directory_removed
{
    const char *target_directory;
};

void nc_send_queue_directory_removed_notification(nc_t *nc, const char *target_directory);

typedef void (*nc_queue_directory_removed_callback_t)(nc_t *nc, const char *channel,
    nc_queue_directory_removed_t *queue_directory_removed_data, void *user_data);
void nc_add_queue_directory_removed_observer(nc_t *nc,
    nc_queue_directory_removed_callback_t callback, void *user_data);


/*
 * Notification type queue_priority_changed
 */

typedef struct nc_queue_priority_changed nc_queue_priority_changed_t;
struct nc_queue_priority_changed
{
    const char *target_filename;
    int priority;
};

void nc_send_queue_priority_changed_notification(nc_t *nc, const char *target_filename, int priority);

typedef void (*nc_queue_priority_changed_callback_t)(nc_t *nc, const char *channel,
    nc_queue_priority_changed_t *queue_priority_changed_data, void *user_data);
void nc_add_queue_priority_changed_observer(nc_t *nc,
    nc_queue_priority_changed_callback_t callback, void *user_data);


/*
 * Notification type queue_directory_added
 */

typedef struct nc_queue_directory_added nc_queue_directory_added_t;
struct nc_queue_directory_added
{
    const char *target_directory;
    const char *nick;
};

void nc_send_queue_directory_added_notification(nc_t *nc, const char *target_directory, const char *nick);

typedef void (*nc_queue_directory_added_callback_t)(nc_t *nc, const char *channel,
    nc_queue_directory_added_t *queue_directory_added_data, void *user_data);
void nc_add_queue_directory_added_observer(nc_t *nc,
    nc_queue_directory_added_callback_t callback, void *user_data);

#endif

